/**
 * 每日一言系统
 * 使用AI生成每日励志名言（可控、安全）
 */

import aiService from '../ai-service.js'

class DailyQuoteSystem {
  constructor() {
    this.quoteCache = []
    this.currentQuoteIndex = 0
    
    // 预设名言（AI失败时使用）
    this.fallbackQuotes = {
      survival: [
        '在荒岛上，勇气和智慧同样重要',
        '每一次尝试都是通向成功的阶梯',
        '适应环境，才能生存下去',
        '今天的努力是明天的希望',
        '困难是暂时的，意志是永恒的'
      ],
      motivation: [
        '相信自己，你比想象中更强大',
        '每一天都是新的开始',
        '坚持就是胜利',
        '永不放弃，希望就在前方',
        '只要还活着，就有无限可能'
      ],
      wisdom: [
        '真正的强者，懂得等待时机',
        '节约资源，就是延续生命',
        '独处是修炼，生存是考验',
        '大自然是最好的老师',
        '心若向阳，无畏风雨'
      ],
      humor: [
        '荒岛生活也要保持微笑',
        '连椰子都比你更有毛发',
        '至少不用上班了',
        '免费的海景房',
        '这是最长的假期'
      ]
    }
  }

  /**
   * 获取今日名言
   */
  async getTodayQuote(day, theme = 'survival') {
    const cacheKey = `daily_quote_day_${day}`
    
    // 检查缓存
    const cached = uni.getStorageSync(cacheKey)
    if (cached) {
      return JSON.parse(cached)
    }
    
    // 生成新名言
    const quote = await this.generateQuote(day, theme)
    
    // 缓存
    uni.setStorageSync(cacheKey, JSON.stringify(quote))
    
    return quote
  }

  /**
   * 生成名言（AI + 回退）
   */
  async generateQuote(day, theme = 'survival') {
    try {
      // 根据天数选择主题
      const autoTheme = this.selectThemeByDay(day)
      const finalTheme = theme || autoTheme
      
      // 尝试AI生成
      const aiQuote = await this.generateAIQuote(day, finalTheme)
      
      if (aiQuote && aiQuote.length >= 10 && aiQuote.length <= 30) {
        return {
          text: aiQuote,
          theme: finalTheme,
          source: 'ai',
          day: day
        }
      }
      
      // 验证失败，使用预设
      throw new Error('AI生成内容不符合要求')
      
    } catch (error) {
      console.warn('AI生成每日一言失败，使用预设:', error)
      return this.getFallbackQuote(theme, day)
    }
  }

  /**
   * 使用AI生成名言
   */
  async generateAIQuote(day, theme) {
    const themes = {
      survival: '生存技巧',
      motivation: '励志鼓励',
      wisdom: '人生智慧',
      humor: '幽默搞笑'
    }
    
    const prompt = `生成一句${themes[theme]}的名言（10-30字）。
背景：玩家在荒岛上生存了${day}天
要求：简洁、有启发性、适合生存游戏场景
格式：纯文本，不要引号和标点`

    try {
      const response = await aiService.generateEvent({
        day: day,
        hp: 100,
        hunger: 50,
        energy: 50,
        contextPrompt: prompt
      })
      
      // 简单提取AI返回的文本
      if (response && response.scene) {
        return response.scene.slice(0, 30)
      }
      
      return null
    } catch (error) {
      console.error('AI API调用失败:', error)
      return null
    }
  }

  /**
   * 获取预设名言
   */
  getFallbackQuote(theme = 'survival', day) {
    const quotes = this.fallbackQuotes[theme] || this.fallbackQuotes.survival
    const index = day % quotes.length
    
    return {
      text: quotes[index],
      theme: theme,
      source: 'preset',
      day: day
    }
  }

  /**
   * 根据天数自动选择主题
   */
  selectThemeByDay(day) {
    if (day <= 3) return 'survival'
    if (day <= 10) return 'motivation'
    if (day <= 30) return 'wisdom'
    if (day <= 50) return 'survival'
    if (day % 7 === 0) return 'humor'  // 每周一次幽默
    return 'motivation'
  }

  /**
   * 获取主题名称
   */
  getThemeName(theme) {
    const names = {
      survival: '生存',
      motivation: '励志',
      wisdom: '智慧',
      humor: '幽默'
    }
    return names[theme] || '生存'
  }

  /**
   * 预生成名言库（可选，用于人工审核）
   */
  async pregenerateQuotes(count = 100) {
    const quotes = []
    
    for (let day = 1; day <= count; day++) {
      const theme = this.selectThemeByDay(day)
      const quote = await this.generateQuote(day, theme)
      quotes.push(quote)
      
      // 延迟避免API限流
      await new Promise(resolve => setTimeout(resolve, 1000))
    }
    
    // 保存到本地供人工审核
    uni.setStorageSync('pregenerated_quotes', JSON.stringify(quotes))
    
    return quotes
  }

  /**
   * 分享名言
   */
  shareQuote(quote) {
    const shareText = `【荒岛生存·第${quote.day}天】\n${quote.text}\n\n来自 MOE 荒岛生存游戏`
    
    // #ifdef MP-WEIXIN
    uni.shareAppMessage({
      title: quote.text,
      path: '/pages/game/text-survival/text-survival'
    })
    // #endif
    
    // #ifdef H5
    // 复制到剪贴板
    uni.setClipboardData({
      data: shareText,
      success: () => {
        uni.showToast({ title: '已复制到剪贴板', icon: 'success' })
      }
    })
    // #endif
    
    return shareText
  }
}

// 导出单例
const dailyQuoteSystem = new DailyQuoteSystem()
export default dailyQuoteSystem 